package co.gov.medellin.ssti.sub.model.dao;

import java.util.Collection;
import java.util.Vector;

import javax.ejb.EJBLocalObject;

import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.ApplicationUserVO;
import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.ApplicationVO;
import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.AuthorizedByBranchVO;
import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.ContractVO;
import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.CostCenterByAuthorizedVO;
import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.FDClassVO;
import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.FDTypeVO;
import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.FDVO;
import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.FlexValueVO;
import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.OptionVO;
import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.ProgramParameterVO;
import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.ProgramVO;
import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.UserGroupOptionVO;
import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.UserGroupVO;
import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.UserVO;
import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.WarehouseByBranchVO;
import co.gov.medellin.ssti.sub.paoyer.common.exception.SystemException;
import co.gov.medellin.ssti.sub.paoyer.common.exception.UserException;

public interface AdministrationFacadeLocalLocal extends EJBLocalObject {
	/**
	 * 
	 * @param strUserGroup
	 * @param strPath
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	String getMenu(String strUserGroup, String strPath) throws UserException,
			SystemException;

	/**
	 * 
	 * @param user
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Vector getResources(UserVO user) throws UserException, SystemException;

	/**
	 * 
	 * @param user
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	UserVO userGroup(UserVO user) throws UserException, SystemException;

	/**
	 * 
	 * @param user
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	UserVO authenticateUser(UserVO user) throws UserException, SystemException;

	/**
	 * 
	 * @param criterea
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findUserByCriterea(UserVO criterea) throws UserException,
			SystemException;

	/**
	 * 
	 * @param user
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	boolean createUser(UserVO user) throws UserException, SystemException;

	/**
	 * 
	 * @param user
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	boolean updateUser(UserVO user) throws UserException, SystemException;

	/**
	 * 
	 * @param user
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	boolean deleteUser(UserVO user) throws UserException, SystemException;

	/**
	 * 
	 * @param application
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	ApplicationVO createApplication(ApplicationVO application)
			throws UserException, SystemException;

	/**
	 * 
	 * @param criterea
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findApplicationByCriterea(ApplicationVO criterea)
			throws UserException, SystemException;

	/**
	 * 
	 * @param criterea
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	int updateApplication(ApplicationVO criterea) throws UserException,
			SystemException;

	/**
	 * 
	 * @param criterea
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	int deleteApplication(ApplicationVO criterea) throws UserException,
			SystemException;

	/**
	 * 
	 * @param userGroup
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	UserGroupVO createUserGroup(UserGroupVO userGroup) throws UserException,
			SystemException;

	/**
	 * 
	 * @param userGroup
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findUserGroupByCriterea(UserGroupVO userGroup)
			throws UserException, SystemException;

	/**
	 * 
	 * @param userGroup
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	UserGroupVO updateUserGroup(UserGroupVO userGroup) throws UserException,
			SystemException;

	/**
	 * 
	 * @param userGroup
	 * @throws UserException
	 * @throws SystemException
	 */
	void deleteUserGroup(UserGroupVO userGroup) throws UserException,
			SystemException;

	/**
	 * 
	 * @param option
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	OptionVO createOption(OptionVO option) throws UserException,
			SystemException;

	/**
	 * 
	 * @param option
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findOptionByCriterea(OptionVO option) throws UserException,
			SystemException;

	/**
	 * 
	 * @param option
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	OptionVO updateOption(OptionVO option) throws UserException,
			SystemException;

	/**
	 * 
	 * @param option
	 * @throws UserException
	 * @throws SystemException
	 */
	void deleteOption(OptionVO option) throws UserException, SystemException;

	/**
	 * 
	 * @param program
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	ProgramVO createProgram(ProgramVO program) throws UserException,
			SystemException;

	/**
	 * 
	 * @param program
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findProgramByCriterea(ProgramVO program) throws UserException,
			SystemException;

	/**
	 * 
	 * @param program
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	ProgramVO updateProgram(ProgramVO program) throws UserException,
			SystemException;

	/**
	 * 
	 * @param program
	 * @throws UserException
	 * @throws SystemException
	 */
	void deleteProgram(ProgramVO program) throws UserException, SystemException;

	/**
	 * 
	 * @param programParameter
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	ProgramParameterVO createProgramParameter(
			ProgramParameterVO programParameter) throws UserException,
			SystemException;

	/**
	 * 
	 * @param programParameter
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findProgramParameterByCriterea(
			ProgramParameterVO programParameter) throws UserException,
			SystemException;

	/**
	 * 
	 * @param programParameter
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	ProgramParameterVO updateProgramParameter(
			ProgramParameterVO programParameter) throws UserException,
			SystemException;

	/**
	 * 
	 * @param programParameter
	 * @throws UserException
	 * @throws SystemException
	 */
	void deleteProgramParameter(ProgramParameterVO programParameter)
			throws UserException, SystemException;

	/**
	 * 
	 * @param userGroupOption
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	UserGroupOptionVO createUserGroupOption(UserGroupOptionVO userGroupOption)
			throws UserException, SystemException;

	/**
	 * 
	 * @param userGroupOption
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findUserGroupOptionByCriterea(UserGroupOptionVO userGroupOption)
			throws UserException, SystemException;

	/**
	 * 
	 * @param userGroupOption
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	UserGroupOptionVO updateUserGroupOption(UserGroupOptionVO userGroupOption)
			throws UserException, SystemException;

	/**
	 * 
	 * @param userGroupOption
	 * @throws UserException
	 * @throws SystemException
	 */
	void deleteUserGroupOption(UserGroupOptionVO userGroupOption)
			throws UserException, SystemException;

	/**
	 * 
	 * @param userGroupOption
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findNotAsociatedOptionByCriterea(
			UserGroupOptionVO userGroupOption) throws UserException,
			SystemException;

	/**
	 * 
	 * @param userGroupOption
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	boolean asociateOptionToUserGroup(UserGroupOptionVO userGroupOption)
			throws UserException, SystemException;

	/**
	 * 
	 * @param applicationUser
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	ApplicationUserVO createApplicationUser(ApplicationUserVO applicationUser)
			throws UserException, SystemException;

	/**
	 * 
	 * @param applicationUser
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findApplicationUserByCriterea(ApplicationUserVO applicationUser)
			throws UserException, SystemException;

	/**
	 * 
	 * @param criterea
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findUserNotAsociatedByCriterea(ApplicationUserVO criterea)
			throws UserException, SystemException;

	/**
	 * 
	 * @param applicationUser
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	ApplicationUserVO updateApplicationUser(ApplicationUserVO applicationUser)
			throws UserException, SystemException;

	/**
	 * 
	 * @param applicationUser
	 * @throws UserException
	 * @throws SystemException
	 */
	void deleteApplicationUser(ApplicationUserVO applicationUser)
			throws UserException, SystemException;

	/**
	 * 
	 * @param flexValue
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	FlexValueVO createFlexValue(FlexValueVO flexValue) throws UserException,
			SystemException;

	/**
	 * 
	 * @param flexValue
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findFlexValueByCriterea(FlexValueVO flexValue)
			throws UserException, SystemException;

	/**
	 * 
	 * @param flexValue
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	boolean updateFlexValue(FlexValueVO flexValue) throws UserException,
			SystemException;

	/**
	 * 
	 * @param flexValue
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	boolean deleteFlexValue(FlexValueVO flexValue) throws UserException,
			SystemException;

	/**
	 * 
	 * @param criterea
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findFlexValueTypeByCriterea(FlexValueVO criterea)
			throws UserException, SystemException;

	/**
	 * 
	 * @param flexValueType
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	FlexValueVO createFlexValueType(FlexValueVO flexValueType)
			throws UserException, SystemException;

	/**
	 * 
	 * @param flexValueType
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	boolean updateFlexValueType(FlexValueVO flexValueType)
			throws UserException, SystemException;

	/**
	 * 
	 * @param flexValueType
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	boolean deleteFlexValueType(FlexValueVO flexValueType)
			throws UserException, SystemException;

	// Consultas
	/**
	 * 
	 * @param criterea
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findInventoryByCriterea(FDVO criterea) throws UserException,
			SystemException;

	/**
	 * 
	 * @param criterea
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findContractByCriterea(ContractVO criterea)
			throws UserException, SystemException;

	/**
	 * 
	 * @param authorizedByBranch
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findAuthorizedBranchByCriterea(
			AuthorizedByBranchVO authorizedByBranch) throws UserException,
			SystemException;

	/**
	 * 
	 * @param warehouseByBranch
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findWarehouseBranchByCriterea(
			WarehouseByBranchVO warehouseByBranch) throws UserException,
			SystemException;

	/**
	 * 
	 * @param costCenterByAuthorized
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findCostCenterAuthorizedByCriterea(
			CostCenterByAuthorizedVO costCenterByAuthorized)
			throws UserException, SystemException;

	/**
	 * 
	 * @param fdClass
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findFDClassByCriterea(FDClassVO fdClass) throws UserException,
			SystemException;

	/**
	 * 
	 * @param fdType
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findFDTypeByCriterea(FDTypeVO fdType) throws UserException,
			SystemException;

	/**
	 * 
	 * @param fdVO
	 * @return
	 * @throws UserException
	 * @throws SystemException
	 */
	Collection findFDHistoryByCriterea(FDVO fdVO) throws UserException,
			SystemException;

}